2005年11月02日
川俣晶の縁側ソフトウェア技術雑記 total 3979 count

ブラウザ間非互換性: Safari2はlocation.hashへの代入で不用の%23を追加する場合がある

Written By: 川俣 晶連絡先

 ヤバイですよ、奥さん。

 Safari2は1つの問題について調べている間に、ぽろぽろと他の問題に出くわします。

 location.hashより取得した値を再びlocation.hashへ代入すると余計な"%23"が追加される場合があります。

検証プログラム §

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

<title>test</title>

</head>

<body>

<input type="button" onclick="location.hash = location.hash + 'A';" 

value="hashにAを追加"></input>

</body>

</html>

 これを表示させ、ボタンをゆっくりと繰り返し押してみます。(素早く押すと受け付けられないことがあるらしい)

 IE, Firefox, Operaでは、これに応じて、アドレス欄の表記が以下のように変化します。

http://……

http://……#A

http://……#AA

http://……#AAA

 しかし、Safari2(412.2)では以下のようになりました。

http://……

http://……#A

http://……#%23AA

http://……#%23%23AAA

 どうも、location.hashから取得した値をそのまま入れると、先頭の#が一般の文字と認識され、%23にエスケープされて#の後ろに追加されてしまうようです。

回避方法 §

 おそらく、location.hashに代入する場合には、常に先頭の#を取り除くように組めばどのWebブラウザでも上手く行くような気がします。(未検証)

感想 §

 疲れた……。1つの問題について調べている間に別の問題が見付かり、それを調べている間に更に別の問題が見付かるSafariっていったい……。